<?php
/* 
 * Sistema Fácil - Desenvolvimento rápido de softwares baseado em sentenças em português
 * Copyright (C) 2010 Rodrigo Caldeira de Paula Lima 
 * 
 * Este arquivo é parte do Sistema Fácil
 *
 * Sistema Fácil é um software livre; você pode redistribui-lo e/ou 
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como 
 * publicada pela Fundação do Software Livre (FSF); na versão 2 da 
 * Licença, ou (na sua opnião) qualquer versão.
 * 
 * Este programa é distribuido na esperança que possa ser  util, 
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
 * MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, escreva para a Fundação do Software
 * Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
 * */

class ConfigBase
{
	var $conn;
	var $base;
	var $tabelas;
	var $tiposCampo;
	var $tabelaParaRestricaoMenu;
	var $tabelaParaAutenticacao;
	var $relatorios;
	
	function __construct($conn, $base) {
		$this->conn = $conn;
		$this->base = $base;
		$this->tiposCampo = array();
		$this->configurarTiposCampo();
		if(!isset($_SERVER['DOCUMENT_ROOT'])){ if(isset($_SERVER['SCRIPT_FILENAME'])){
		$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF'])));
		}; };
		if(!isset($_SERVER['DOCUMENT_ROOT'])){ if(isset($_SERVER['PATH_TRANSLATED'])){
		$_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF'])));
		}; };
		$this->pathCadastros = $_SERVER["DOCUMENT_ROOT"] . "/Cadastros";
		$this->pathRelatorios = $_SERVER["DOCUMENT_ROOT"] . "/Relatorios";
		$this->pathUpload = $_SERVER["DOCUMENT_ROOT"] . "/Upload";
		$this->tabelas = array(); 
		$this->relatorios = array();
	}
	
	function configurar() {
		$dirCadastros = opendir($this->pathCadastros);
		while (($arquivo = readdir($dirCadastros)) !== FALSE) {
			if ($arquivo != "." && $arquivo != ".." && $arquivo != ".svn") {
				$tabela = new Tabela();
				$tabela->nome = utf8_encode($arquivo);
				$tabela->configBase = $this;
				array_push($this->tabelas, $tabela);
				$this->tiposCampo[$tabela->nome] = "int";
			}
		}
		closedir($dirCadastros);
		foreach ($this->tabelas as $tabela) {
			$this->configurarTabela($tabela);
			$query = "SELECT id FROM `" . $tabela->nome . "` LIMIT 0, 1";
			$result = mysql_query($query, $this->conn);
			if (!$result) {
				$this->criarTabela($tabela);
			} else {
				$this->verificarCampos($tabela);
			}
		}
		
		$dirRelatorios = opendir($this->pathRelatorios);
		while (($arquivo = readdir($dirRelatorios)) !== FALSE) {
			if ($arquivo != "." && $arquivo != ".." && $arquivo != ".svn") {
				$relatorio = new Relatorio();
				$relatorio->nome = utf8_encode($arquivo);
				$relatorio->configBase = $this;
				array_push($this->relatorios, $relatorio);
			}
		}
		closedir($dirRelatorios);
		foreach ($this->relatorios as $relatorio) {
			$this->configurarRelatorio($relatorio);
		}
	}
	
	function configurarRelatorio($relatorio) {
		$linhas = file(utf8_decode($this->pathRelatorios . "/" . $relatorio->nome));
		$i = 0;
		while ($i < count($linhas)) {
			$linhas[$i] = str_replace("\r\n", "", $linhas[$i]);
			if (isset($linhas[$i][0]) && $linhas[$i][0] == "#") {
				$i++;
				continue;
			}
			switch ($linhas[$i]) {
				case "Colunas:":
					$i++;
					while ($linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								$tabelaJaSelecionada = false;
								foreach ($relatorio->tabelas as $tabelaNoRelatorio) {
									if ($tabelaNoRelatorio->nome == $tabelaSelecionada->nome) {
										$tabelaJaSelecionada = true;
										break;
									}
								}
								if (!$tabelaJaSelecionada) {
									array_push($relatorio->tabelas, $tabelaSelecionada);
								}
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($relatorio->colunas, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Ordenação:":
					$i++;
					while ($linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($relatorio->colunasOrdenacao, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Filtros:":
					$i++;
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($relatorio->camposFiltro, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Agrupar por:":
					$i++;
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($relatorio->camposAgrupamento, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Somatória:":
					$i++;
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo) && ($campo->tipoConfig == "Número" || $campo->tipoConfig == "Número Decimal")) {
									array_push($relatorio->camposSomatoria, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Gráfico quantitativo de pizza:":
					$linhas[$i] = str_replace(":", "", str_replace("Gráfico", "", $linhas[$i]));
					$tipoGrafico = explode(" de ", $linhas[$i]);
					$grafico = new Grafico();
					$grafico->tratamento = $tipoGrafico[0];
					$grafico->tipo = $tipoGrafico[1];
					$i++;
					
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						if (strpos($linhas[$i], " do ") !== FALSE) {
							$separadorTabela = " do ";
						} else {
							$separadorTabela = " da ";
						}
						$nomeTabela = explode($separadorTabela, $linhas[$i]);
						$nomeTabela = trim($nomeTabela[1]);
						$tabelaSelecionada = "";
						foreach ($this->tabelas as $tabela) {
							if ($tabela->nome == $nomeTabela) {
								$tabelaSelecionada = $tabela;
								break;
							}
						}
						$linhas[$i] = trim(str_replace($separadorTabela . $nomeTabela, "", $linhas[$i]));
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabelaSelecionada->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($grafico->campos, $campo);
									break;
								}
							}
						}
						$i++;
					}
					array_push($relatorio->graficos, $grafico);
					break;
			}
			$i++;
		}
	}
	
	function configurarTabela($tabela) {
		$linhas = file(utf8_decode($this->pathCadastros . "/" . $tabela->nome));
		$i = 0;
		while ($i < count($linhas)) {
			$linhas[$i] = str_replace("\r\n", "", $linhas[$i]);
			if (isset($linhas[$i][0]) && $linhas[$i][0] == "#") {
				$i++;
				continue;
			}
			switch ($linhas[$i]) {
				case "Campos:":
					$i++;
					while ($linhas[$i][0] == "\t") {
						$campo = new Campo();
						$infoCampo = explode(",", $linhas[$i]);
						$campo->nome = trim($infoCampo[0]);
						$campo->tipoConfig = trim($infoCampo[1]);
						$campo->tipo = $this->tipoCampo($infoCampo[1]);
						$campo->opcional = false;
						$campo->configBase = $this;
						if (count($infoCampo) > 2) {
							for ($j = 2; $j < count($infoCampo); $j++) {
								$infoAdicional = trim($infoCampo[$j]);
								if ($infoAdicional == "opcional") {
									$campo->opcional = true;
								} else if (strpos($infoAdicional,"Mostrar campo") !== FALSE){
									$infoAdicional = trim(str_replace("Mostrar campo", "", $infoAdicional));
									$campo->mostrarCampo = $infoAdicional;
								} else if ($infoAdicional == "não editável") {
									$campo->editavel = false;
								} else if (strpos($infoAdicional, "valor padrão") !== FALSE) {
									$campo->valorPadrao = trim(str_replace("valor padrão", "", $infoAdicional));
								} else if (strpos($infoAdicional, "exibir quando") !== FALSE) {
									$infoAdicional = trim(str_replace("exibir quando", "", $infoAdicional));
									Condicao::lerCondicoes($tabela, $campo->condicoesExibicao, $infoAdicional);
								} else if (strpos($infoAdicional, "editável quando") !== FALSE) {
									$infoAdicional = trim(str_replace("editável quando", "", $infoAdicional));
									Condicao::lerCondicoes($tabela, $campo->condicoesEdicao, $infoAdicional);
								}
							}
						}
						$campo->tabela = $tabela;
						array_push($tabela->campos,$campo);
						$i++;
					}
					break;
				case "Lista:":
					$i++;
					$infoCamposNaLista = explode(",", $linhas[$i]);
					foreach ($infoCamposNaLista as $nomeCampoNaLista) {
						$nomeCampoNaLista = trim($nomeCampoNaLista);
						foreach ($tabela->campos as $campo) {
							if ($campo->nome == $nomeCampoNaLista) {
								array_push($tabela->camposNaLista, $campo);
								break;
							}
						}
					}
					break;
				case "Usar para autenticação:":
					$i++;
					$infoCamposParaAutenticacao = explode(",", $linhas[$i]);
					foreach ($infoCamposParaAutenticacao as $nomeCampoParaAutenticacao) {
						$nomeCampoParaAutenticacao = trim($nomeCampoParaAutenticacao);
						foreach ($tabela->campos as $campo) {
							if ($campo->nome == $nomeCampoParaAutenticacao) {
								array_push($tabela->camposParaAutenticacao, $campo);
								break;
							}
						}
					}
					$tabela->usarParaAutenticacao = true;
					$this->tabelaParaAutenticacao = $tabela;
					break;
				case "Mensagem de bem vindo:":
					$i++;
					$infoCamposBemVindo = explode(",", $linhas[$i]);
					foreach ($infoCamposBemVindo as $nomeCampoBemVindo) {
						$nomeCampoBemVindo = trim($nomeCampoBemVindo);
						foreach ($tabela->campos as $campo) {
							if ($campo->nome == $nomeCampoBemVindo) {
								$tabela->campoBemVindo = $campo;
								break;
							}
						}
					}
					break;
				case "Regras para listagem:":
					$i++;
					$where = "";
					$clausula = " WHERE "; 
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						$linhas[$i] = substr($linhas[$i], 1);
						$nomeCampoRestricao = trim(substr($linhas[$i], 0, strpos($linhas[$i], " ")));
						if (strpos(substr($linhas[$i], strlen($nomeCampoRestricao)), " do ") == 0) {
							$nomeTabela = trim(substr($linhas[$i], strlen($nomeCampoRestricao) + 3));
							$nomeTabela = trim(substr($nomeTabela, 0, strpos($nomeTabela, " ")));
							$nomeCampo = $nomeCampoRestricao . " do " . $nomeTabela;
							foreach ($tabela->campos as $campo) {
								if ($campo->nome == $nomeTabela) {
									$nomeTabela = $campo->tipoConfig;
								}
							}	
						} else {
							$nomeCampo = $nomeCampoRestricao;
						}
						$operacaoRestricao = trim(str_replace($nomeCampo, "", $linhas[$i]));
						if (strpos($operacaoRestricao, "igual ao") == 0 || strpos($operacaoRestricao, "igual a") == 0) {
							$operacaoRestricao = str_replace("igual ao", "igual a", $operacaoRestricao);
							$valorRestricao = trim(substr($operacaoRestricao, 7));
							$operacaoRestricao = "igual a";
						}
						$where .= $clausula;
						$clausula = " AND ";
						if ($nomeTabela) { 
							$where .= "`" . $nomeTabela . "`.`" . $nomeCampoRestricao . "` ";
						} else {
							$where .= "`" . $tabela->nome . "`.`" . $nomeCampoRestricao . "` ";
						}
						switch ($operacaoRestricao) {
							case "igual ao":
							case "igual a":
								$where .= " = ";
								break;
							case "tenha":
								$where .= " LIKE ";
								break;
						}
						if (strpos($valorRestricao, " do ") > -1) {
							$origemRestricao = trim(substr($valorRestricao, 0, strpos($valorRestricao, " do ")));
							$valorRestricao = trim(substr($valorRestricao, strpos($valorRestricao, " do ") + 3));
						}
						switch ($valorRestricao) {
							case "logado":
								if ($origemRestricao) {
									$tabelaAutenticacao = "";
									$id = "";
									if (isset($_SESSION['tabelaAutenticacao'])) $tabelaAutenticacao = $_SESSION['tabelaAutenticacao'];
									if (isset($_SESSION['id'])) $id = $_SESSION['id'];
									$query = "SELECT `" . $origemRestricao . "` FROM `" . $tabelaAutenticacao . "` WHERE id = " . $id;
									if ($result = mysql_query($query, $this->conn)) {
										$where .= mysql_result($result, 0);
									} else {
										$where = "`" . $origemRestricao. "`";
									}
								} else {
									$where .= $_SESSION['id'];
								}
								break;
							default:
								$where .= $valorRestricao;
								break;
						}
						
						$where .= " ";
						$i++;
					}
					$tabela->restricoesListagem = $where;
					break;
				case "Usar para restrição do menu:":
					$query = "SELECT * FROM information_schema.TABLES WHERE TABLE_NAME = '" . $tabela->nome . "_X_Menu'";
					$result = mysql_query($query, $this->conn);
					if (!mysql_num_rows($result)) {
						$query = "CREATE TABLE `" . $tabela->nome . "_X_Menu` (";
						$query .= "`" . $tabela->nome . "Id` int,";
						$query .= "menu varchar(64),";
						$query .= "criar bit,";
						$query .= "alterar bit,";
						$query .= "excluir bit)";
						//echo $query;
						mysql_unbuffered_query($query, $this->conn);
					}
					$tabela->usarParaRestricaoMenu = true;
					$this->tabelaParaRestricaoMenu = $tabela;
					break;
				case "Regras de workflow:":
					$i++;
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						$linhas[$i] = substr($linhas[$i], 1);
						$nomeOperacaoWorkflow = trim(substr($linhas[$i], 0, strpos($linhas[$i], " ")));
						$linhas[$i] = trim(substr($linhas[$i], strpos($linhas[$i], " ")));
						switch ($nomeOperacaoWorkflow) {
							case "Atualizar":
								$operacaoWorkflow = new OperacaoWorkflowAtualizar();								
								$operacaoWorkflow->condicoes = array();
								$campoWorkflow = trim(substr($linhas[$i], 0, strpos($linhas[$i], " para ")));
								$linhas[$i] = trim(substr($linhas[$i], strpos($linhas[$i], " para ")));
								$operacaoAtualizacao = trim(substr($linhas[$i], 0, strpos($linhas[$i], " ")));
								$linhas[$i] = trim(substr($linhas[$i], strpos($linhas[$i], " ")));
								$valorAtualizacao = trim(substr($linhas[$i], 0, strpos($linhas[$i], " quando ")));
								$linhas[$i] = trim(substr($linhas[$i], strpos($linhas[$i], " quando ")));
								$linhas[$i] = trim(substr($linhas[$i], strpos($linhas[$i], " ")));
								Condicao::lerCondicoes($tabela, $operacaoWorkflow->condicoes, $linhas[$i]);
								$query = "UPDATE ";
								$query .= "`" . $tabela->nome . "` SET ";
								$query .= "`" . $campoWorkflow . "` = ";
								foreach ($tabela->campos as $campo) {
									if ($campo->nome == $campoWorkflow) {
										if (!$this->verificarTipoBasico($campo)) {
											$queryValorAtualizacao = "SELECT id FROM `" . $campo->tipoConfig . "` WHERE `" . $campo->mostrarCampo . "` = " . $valorAtualizacao;
											$result = mysql_query($queryValorAtualizacao, $this->conn);
											if (mysql_num_rows($result)) {
												$valorAtualizacao = mysql_result($result, 0);
											}
										}
										$query .= $valorAtualizacao;
									}
								}
								$operacaoWorkflow->query = $query;
								$operacaoWorkflow->tabela = $tabela;
								array_push($tabela->operacoesWorkflow, $operacaoWorkflow);
								break;
						}
						$i++;
					}
					break;
				case "Paginação:":
					$i++;
					$tabela->registrosPorPagina = trim($linhas[$i]);
					break;
				case "Filtros:":
					$i++;
					while (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						$nomeCampos = explode(",", $linhas[$i]);
						foreach($nomeCampos as $nomeCampo) {
							foreach ($tabela->campos as $campo) {
								if ($campo->nome == trim($nomeCampo)) {
									array_push($tabela->camposFiltro, $campo);
									break;
								}
							}
						}
						$i++;
					}
					break;
				case "Campo para exibição:":
					$i++;
					if (isset($linhas[$i][0]) && $linhas[$i][0] == "\t") {
						$nomeCampoParaExibicao = trim($linhas[$i]);
						$tabela->campoParaExibicao = $nomeCampoParaExibicao;
					}
					break;
				/*default:
					echo $linhas[$i];
					break;*/
			}
			$i++;
		}
	}
	
	function criarTabela($tabela) {
		$query = "CREATE TABLE `" . $tabela->nome . "` (id int PRIMARY KEY AUTO_INCREMENT, ";
		foreach ($tabela->campos as $campo) {
			if ($campo->tipo !== NULL) {
				$query .= "`" . $campo->nome . "` " . $campo->tipo ." NULL,";
			}
		}
		$query = substr($query, 0, strlen($query) - 1);
		$query .= ")";
		//echo $query;
		mysql_unbuffered_query($query, $this->conn);
	}
	
	function verificarCampos($tabela) {
		$query = "SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = '" . strtolower($this->base) . "' AND table_name = '" . mb_strtolower($tabela->nome, "UTF-8") . "'";
		//echo $query;
		$result = mysql_query($query, $this->conn);
		$camposInexistentes = array();
		foreach ($tabela->campos as $campo) {
			if ($campo->tipo === NULL) continue;
			$achou = false;
			while ($registro = mysql_fetch_array($result)) {
				if ($campo->nome == $registro['column_name']) {
					$achou = true;
					break;
				} 
			}
			if (!$achou) {
				array_push($camposInexistentes, $campo);
			}
			mysql_data_seek($result, 0);
		}
		if (count($camposInexistentes) > 0) {
			$query = "ALTER TABLE `" . $tabela->nome . "` ";
			foreach ($camposInexistentes as $campoInexistente) {
				$query .= "ADD COLUMN `" . $campoInexistente->nome . "` " . $campoInexistente->tipo . " NULL,";
			}
			$query = substr($query, 0, strlen($query) - 1);
			//echo $query;
			mysql_unbuffered_query($query, $this->conn);
		}
	}
	
	function configurarTiposCampo() {
		$this->tiposCampo["Texto"] = "varchar(255)";
		$this->tiposCampo["Texto Grande"] = "text";
		$this->tiposCampo["Número"] = "int";
		$this->tiposCampo["Número Decimal"] = "decimal(10,2)";
		$this->tiposCampo["Data"] = "date";
		$this->tiposCampo["Senha"] = "varchar(32)";
		$this->tiposCampo["Sim ou Não"] = "tinyint(1)";
		$this->tiposCampo["Arquivo"] = "varchar(255)";
		$this->tiposCampo["Expressão Numérica"] = "decimal(10,2)";
		$this->tiposCampo["Checagem de"] = NULL;
	}
	
	function verificarTipoBasico($campo) {
		switch ($campo->tipoConfig) {
			case "Texto":
			case "Texto Grande":
			case "Número":
			case "Número Decimal":
			case "Data":
			case "Senha":
			case "Sim ou Não":
			case "Arquivo":
			case "Expressão Numérica":
				return true;
			default:
				return false;
			
		}
	}
	
	function tipoCampo($tipo) {
		$tipo = trim($tipo);
		if (strpos($tipo, "Checagem de") !== FALSE) {
			return $this->tiposCampo["Checagem de"];
		} else {
			return $this->tiposCampo[trim($tipo)];
		}
	}
}
?>